#include <iostream>
#include <functional>
#include <string>

// 普通函数
int multiply(int x, int y) {
    return x * y;
}

// 函数对象
struct Divider {
    int operator()(int x, int y) {
        if (y != 0) return x / y;
        return 0; // 避免除以零
    }
};

int main() {
    // 使用 std::function 定义一个可调用对象的容器
    std::function<int(int, int)> func;

    // 将普通函数存储到 std::function
    func = multiply;
    std::cout << "乘法结果: " << func(10, 5) << std::endl; // 应输出 50

    // 将 Lambda 表达式存储到 std::function
    func = [](int x, int y) { return x - y; };
    std::cout << "减法结果: " << func(10, 5) << std::endl; // 应输出 5

    // 将函数对象存储到 std::function
    func = Divider();
    std::cout << "除法结果: " << func(10, 5) << std::endl; // 应输出 2


    return 0;
}